package com.atguigu.security.custom;

import com.atguigu.common.util.MD5;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

/**
 * <p>
 * 密码处理
 * </p>
 *
 */
@Component
public class CustomMd5PasswordEncoder implements PasswordEncoder {


    /**
     * 对原始密码进行加密处理
     * 本方法使用MD5加密算法对输入的字符序列进行加密，返回加密后的字符串
     * 选择MD5加密是因为它是一种广泛使用的哈希函数，能够快速提供数据的不可逆的加密处理
     * 尽管MD5不是最安全的加密方式，但对于基本的密码加密场景，它能够提供足够的安全性
     *
     * @param rawPassword 待加密的原始密码，作为输入的字符序列
     * @return 加密后的密码字符串，用于存储或验证
     */
    public String encode(CharSequence rawPassword) {
        return MD5.encrypt(rawPassword.toString());
    }

    /**
     * 验证给定的原始密码与加密后的密码是否匹配
     *
     * @param rawPassword 用户输入的原始密码，需要转换为字符串并加密
     * @param encodedPassword 数据库中存储的加密后的密码，用于与加密后的原始密码比较
     * @return 如果加密后的原始密码与数据库中的密码匹配，则返回true；否则返回false
     */
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        // 将原始密码转换为字符串并使用MD5加密，
        return encodedPassword.equals(MD5.encrypt(rawPassword.toString()));
    }
}